package singleton;

import java.lang.reflect.Constructor;

/**
 * 反射: java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都可以调用它的任意方法和属性;这种动态获取信息以及
 * 动态调用对象的方法的功能成为java语言的反射机制
 *
 * 反射可以破坏静态内部类的单例,解决方案之一就是: 构造方法判断instance!=null时候抛出异常
 *
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2024-08-23 16:49
 */
public class Singleton_05_Reflect {
    public static void main(String[] args) {
        try {
            //1.获取要反射类的class对象
            Class<Singleton_05> clazz = Singleton_05.class;
            //2.getDeclaredxxx: 不受权限控制的获取成员变量
            Constructor<Singleton_05> c = clazz.getDeclaredConstructor(null);
            //3.设置为true就可以对类中私有成员操作了
            c.setAccessible(true);
            Singleton_05 singleton_05 = c.newInstance();
            Singleton_05 singleton_051 = c.newInstance();
            //比较这两个对象的内存地址,发现为false
            System.out.println(singleton_05 == singleton_051);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
